// ============================================================ //
// ============================================================ //
//
// @Group       : QiXin Supply Chain Team
// @Author      : ZhiQiang Cheng
// @Date        : 2024-07-11
// @Description : 用户收藏商品时, 需要记录最近收藏的有限列表,比如最近的1000条商品.用于拼团奖品生成?
//
// ============================================================ //
// ============================================================ //

package job

import (
	"sync/atomic"
	"time"
	"wooha-cache-hub/cache"
	"wooha-cache-hub/dao"

	"github.com/StarfishProgram/starfish-go-sdk/sdklog"
	"github.com/StarfishProgram/starfish-go-sdk/sdktypes"
)

type userFavorite struct{}

var UserFavorite = new(userFavorite)

func (uf *userFavorite) Listen(running *atomic.Bool) {
	for running.Load() {
		userId, err := cache.PopUserFavoriteChannel()
		if err != nil {
			sdklog.Error(err)
			time.Sleep(time.Second)
			continue
		} else if userId == nil {
			time.Sleep(time.Second)
			continue
		}

		sdklog.Info("用户收藏频道:", userId)
		uf.handle(*userId)
	}
}

func (uf *userFavorite) handle(userId sdktypes.ID) {
	ids, err := dao.Users.GetFavorite(userId)
	if err != nil {
		sdklog.Error(err)
		return
	}

	if err := cache.FlushUserFavorite(userId, ids); err != nil {
		sdklog.Error(err)
		return
	}

	sdklog.Info("用户收藏已刷新:", userId)
}
